home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI2 / LEZIONE6q.s < prev    next >
Text File  |  1994-07-28  |  6KB  |  225 lines

  1.  
  2. ; Lezione6q.s    Alcune "scacchiere" screate sullo schermo
  3. ;        - ALTERNARE TASTO SINISTRO-DESTRO-SINISTRO del mouse per
  4. ;        vedere le scacchiere ed uscire
  5.  
  6.     SECTION    CiriCop,CODE
  7.  
  8. Inizio:
  9.     move.l    4.w,a6        ; Execbase
  10.     jsr    -$78(a6)    ; Disable
  11.     lea    GfxName(PC),a1    ; Nome lib
  12.     jsr    -$198(a6)    ; OpenLibrary
  13.     move.l    d0,GfxBase
  14.     move.l    d0,a6
  15.     move.l    $26(a6),OldCop    ; salviamo la vecchia COP
  16.  
  17. ;     PUNTIAMO IL NOSTRO BITPLANE
  18.  
  19.     MOVE.L    #BITPLANE,d0
  20.     LEA    BPLPOINTERS,A1
  21.     move.w    d0,6(a1)
  22.     swap    d0
  23.     move.w    d0,2(a1)
  24.  
  25.     move.l    #COPPERLIST,$dff080    ; Puntiamo la nostra COP
  26.     move.w    d0,$dff088        ; Facciamo partire la COP
  27.     move.w    #0,$dff1fc        ; Disattiva l'AGA
  28.     move.w    #$c00,$dff106        ; Disattiva l'AGA
  29.  
  30.     bsr.w    GRIGLIA1
  31.  
  32. mouse:
  33.     btst    #6,$bfe001    ; tasto sinistro?
  34.     bne.s    mouse
  35.  
  36.     bsr.w    GRIGLIA2
  37.  
  38. mouse2:
  39.     btst    #2,$dff016    ; tasto destro?
  40.     bne.s    Mouse2
  41.  
  42.     bsr.w    GRIGLIA3
  43.  
  44. mouse3:
  45.     btst    #6,$bfe001    ; tasto sinistro?
  46.     bne.s    mouse3
  47.  
  48.     bsr.w    GRIGLIA4
  49.  
  50. mouse4:
  51.     btst    #2,$dff016    ; tasto destro?
  52.     bne.s    Mouse4
  53.  
  54.  
  55.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  56.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  57.  
  58.     move.l    4.w,a6
  59.     jsr    -$7e(a6)    ; Enable
  60.     move.l    gfxbase(PC),a1
  61.     jsr    -$19e(a6)    ; Closelibrary
  62.     rts
  63.  
  64. ;    Dati
  65.  
  66. GfxName:
  67.     dc.b    "graphics.library",0,0
  68.  
  69. GfxBase:
  70.     dc.l    0
  71.  
  72. OldCop:
  73.     dc.l    0
  74.  
  75.  
  76.  
  77. ; questa routine fa una scacchiera con quadrati di 8 pixel di lato
  78.  
  79. GRIGLIA1:
  80.     LEA    BITPLANE,a0    ; Indirizzo bitplane destinazione
  81.  
  82.     MOVEQ    #16-1,d0    ; 16 coppie di quadretti alti 8 pixel
  83.                 ; 16*2*8=256 riempimento completo dello schermo
  84. FaiCoppia:
  85.     move.l    #(20*8)-1,d1    ; 20 words per riempire 1 linea
  86.                 ; 8 linee da riempire
  87. FaiUNO:
  88.     move.w    #%1111111100000000,(a0)+ ; lunghezza quadretto ad 1 = 8 pixel
  89.                      ; quadretto azzerato = 8 pixel
  90.     dbra    d1,FaiUNO         ; fai 8 linee #.#.#.#.#.#.#.#.#.#
  91.  
  92.     move.l    #(20*8)-1,d1    ; 20 words per riempire 1 linea
  93.                 ; 8 linee da riempire
  94. FaiALTRO:
  95.     move.w    #%0000000011111111,(a0)+ ; lunghezza quadretto azzerato = 8
  96.                      ; quadretto ad 1 = 8 pixel
  97.     dbra    d1,FaiAltro         ; fai 8 linee .#.#.#.#.#.#.#.#.#.
  98.  
  99.     DBRA    d0,FaiCoppia         ; fai 16 coppie di quadretti
  100.                      ; #.#.#.#.#.#.#.#.#.#
  101.     rts                 ; .#.#.#.#.#.#.#.#.#.
  102.  
  103. ; questa routine fa una scacchiera con quadrati di 4 pixel di lato
  104.  
  105. GRIGLIA2:
  106.     LEA    BITPLANE,a0    ; Indirizzo bitplane destinazione
  107.  
  108.     MOVEQ    #32-1,d0    ; 32 coppie di quadretti alti 4 pixel
  109.                 ; 32*2*4=256 riempimento completo dello schermo
  110. FaiCoppia2:
  111.     move.l    #(40*4)-1,d1    ; 40 bytes per riempire 1 linea
  112.                 ; 4 linee da riempire
  113. FaiUNO2:
  114.     move.b    #%11110000,(a0)+     ; lunghezza quadretto ad 1 = 4 pixel
  115.                     ; quadretto azzerato = 4 pixel
  116.     dbra    d1,FaiUNO2        ; fai 4 linee #.#.#.#.#.#.#.#.#.#
  117.  
  118.     move.l    #(40*4)-1,d1    ; 40 bytes per riempire 1 linea
  119.                 ; 4 linee da riempire
  120. FaiALTRO2:
  121.     move.b    #%00001111,(a0)+     ; lunghezza quadretto azzerato=4 pixel
  122.                     ; quadretto ad 1 = 4 pixel
  123.     dbra    d1,FaiAltro2        ; fai 8 linee .#.#.#.#.#.#.#.#.#.
  124.  
  125.     DBRA    d0,FaiCoppia2         ; fai 32 coppie di quadretti
  126.                      ; #.#.#.#.#.#.#.#.#.#
  127.     rts                 ; .#.#.#.#.#.#.#.#.#.
  128.  
  129. ; questa routine fa una scacchiera con quadrati di 16 pixel di lato
  130.  
  131. GRIGLIA3:
  132.     LEA    BITPLANE,a0    ; Indirizzo bitplane destinazione
  133.  
  134.     MOVEQ    #8-1,d0        ; 8 coppie di quadretti alti 16 pixel
  135.                 ; 8*2*16=256 riempimento completo dello schermo
  136. FaiCoppia3:
  137.     move.l    #(10*16)-1,d1    ; 10 lingwords per riempire 1 linea
  138.                 ; 16 linee da riempire
  139. FaiUNO3:
  140.     move.l    #%11111111111111110000000000000000,(a0)+ 
  141.                     ; lunghezza quadretto ad 1 = 16 pixel
  142.                     ; quadretto azzerato = 16 pixel
  143.     dbra    d1,FaiUNO3        ; fai 16 linee #.#.#.#.#.#.#.#.#.#
  144.  
  145.     move.l    #(10*16)-1,d1    ; 10 lingwords per riempire 1 linea
  146.                 ; 16 linee da riempire
  147. FaiALTRO3:
  148.     move.l    #%00000000000000001111111111111111,(a0)+
  149.                     ; lunghezza quadretto azzerato = 16
  150.                     ; quadretto ad 1 = 16 pixel
  151.     dbra    d1,FaiAltro3        ; fai 8 linee .#.#.#.#.#.#.#.#.#.
  152.  
  153.     DBRA    d0,FaiCoppia3         ; fai 8 coppie di quadretti
  154.                      ; #.#.#.#.#.#.#.#.#.#
  155.     rts                 ; .#.#.#.#.#.#.#.#.#.
  156.  
  157.     ; griglia "fantasia"
  158.  
  159. GRIGLIA4:
  160.     LEA    BITPLANE,a0    ; Indirizzo bitplane destinazione
  161.  
  162.     MOVEQ    #8-1,d0        ; 8 coppie di quadretti alti 16 pixel
  163.                 ; 8*2*16=256 riempimento completo dello schermo
  164. FaiCoppia4:
  165.     move.l    #(10*16)-1,d1    ; 10 lingwords per riempire 1 linea
  166.                 ; 16 linee da riempire
  167. FaiUNO4:
  168.     move.l    #%11111000000000011111000000000000,(a0)+ 
  169.                     ; lunghezza quadretto ad 1 = 4 pixel
  170.                     ; quadretto azzerato = 12 pixel
  171.     dbra    d1,FaiUNO4        ; fai 16 linee #.#.#.#.#.#.#.#.#.#
  172.  
  173.     move.l    #(10*16)-1,d1    ; 10 lingwords per riempire 1 linea
  174.                 ; 16 linee da riempire
  175. FaiALTRO4:
  176.     move.l    #%00000000000011111000000000011111,(a0)+
  177.                     ; lunghezza quadretto azzerato = 12
  178.                     ; quadretto ad 1 = 4 pixel
  179.     dbra    d1,FaiAltro4        ; fai 8 linee .#.#.#.#.#.#.#.#.#.
  180.  
  181.     DBRA    d0,FaiCoppia4         ; fai 8 coppie di quadretti
  182.                      ; #.#.#.#.#.#.#.#.#.#
  183.     rts                 ; .#.#.#.#.#.#.#.#.#.
  184.  
  185.     SECTION    GRAPHIC,DATA_C
  186.  
  187. COPPERLIST:
  188.     dc.w    $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
  189.     dc.w    $12a,0,$12c,0,$12e,0,$130,0,$132,0
  190.     dc.w    $134,0,$136,0,$138,0,$13a,0,$13c,0
  191.     dc.w    $13e,0
  192.  
  193.     dc.w    $8E,$2c81    ; DiwStrt
  194.     dc.w    $90,$2cc1    ; DiwStop
  195.     dc.w    $92,$0038    ; DdfStart
  196.     dc.w    $94,$00d0    ; DdfStop
  197.     dc.w    $102,0        ; BplCon1
  198.     dc.w    $104,0        ; BplCon2
  199.     dc.w    $108,0        ; Bpl1Mod
  200.     dc.w    $10a,0        ; Bpl2Mod
  201.             ; 5432109876543210
  202.     dc.w    $100,%0001001000000000    ; 1 bitplane LOWRES 320x256
  203.  
  204. BPLPOINTERS:
  205.     dc.w $e0,0,$e2,0    ;primo     bitplane
  206.  
  207.     dc.w    $0180,$000    ; color0 - SFONDO
  208.     dc.w    $0182,$19a    ; color1 - DISEGNO
  209.  
  210.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  211.  
  212.  
  213.     SECTION    MIOPLANE,BSS_C
  214.  
  215. BITPLANE:
  216.     ds.b    40*256    ; un bitplane lowres 320x256
  217.  
  218.     end
  219.  
  220. Se avete bisogno di uno sfondo geometrico o ripetitivo potete farvelo con una
  221. routine anziche' disegnarlo, risparmiando lo spazio della figura. Questo e'
  222. solo un esempio di quello che si puo' fare, si possono anche ripetere piccoli
  223. disegni sullo schermo copiandoli uno accanto all'altro come mattoncini.
  224.  
  225.